home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MIDICraft's MIDINET CD-ROM
/
MIDICraft's MIDINET CD-ROM.iso
/
MIDTOOLS
/
MIDICAT1.DOC
< prev
next >
Wrap
Text File
|
1997-05-10
|
15KB
|
359 lines
MidiCat v1.0 Copyright 1994 Ron Dippold - Quick Docs
All Rights Reserved
INFO BLURB
MidiCat looks through your MIDI files and summarizes the important
information in a one-line-per-file mode for cataloging or a more verbose
informational mode. It also tracks General MIDI Instrument and Drum usage
within the file for analysis.
PC only, runs under DOS. This is 100% free software. The only requirement
is that you must distribute the executable only along with this
documentation.
If you're going to distribute this as part of a package or like/use the
program, please let me know at rdippold@qualcomm.com. I'm not going to ask
for money, I'd just like to know. If I think there's enough interest, I'll
update this to handle Cakewalk .WRK files and make some other improvements.
I. INTRODUCTION
The entire purpose of this program is to look at a MIDI file and give you a
quick "dump" of the important contents. I looked all over the Internet
for such a program for the purposes of managing my collection, and didn't
find one, so, being a programmer, I grabbed the MIDI spec and wrote one.
MidiCat Operates in two modes - single line and informational modes. By
default, single line mode is used: each MIDI file processed is reduced to a
single line of information. If you specify additional data to be shown,
then the single line of info is still shown, but the additional data
follows. Typically, you might use the single line mode to produce a
catalog of a whole directory of MIDI files, and the informational modes
when you're looking at an individual file, for instance prior to playing
it.
Once you've got your list of files, then you can use a good text editor
like QEdit or Sprint to massage your "database."
Note: MidiCat doesn't recognize Cakewalk WRK files, but I'm working on
getting the specs...
If you have more information or suggestions, feel free to email them to
rdippold@qualcomm.com (Internet).
II. SINGLE LINE MODE
Single line usage is easy:
midicat <filename> ( <filename> <filename> ... )
<filename> can be the name of a MIDI file, or can include wildcards. You
can specify multiple filenames with wildcards, so you could do
midicat my.mid c:\midi\*.mid d:\mididata\*.mmf
midicat doesn't assume anything about extensions - no ".mid" is implied.
You'll get something like this:
Filename Size F #T Time Midi Name
----------------------------------------------------------------------------
ACKER-GS MID 42,355 1 22 4:43
ADAGIO MID 17,180 1 10 3:47 WinJammer Demo
ADAMSFAM MID 2,141 1 6 0:52
ADDCTDGS MID 42,315 1 21 3:51
AGENTMAN MID 42,874 1 33 3:23
ALLATRCA MID 17,563 1 5 4:27 Alla Turca - Wolfgang A Mozart
ALMONDS MID 49,889 0 1 1:56
ALNITLNG MID 28,160 - 0 1:56 ** unknown type
ANCHOR MID 6,591 0 1 1:36 Anchors Aweigh
...
Filename: The actual name of the file on disk
Blank Space: For your use...
Size: Size of file in bytes
F: Midi Format 0, 1, or 2
0 = single track
1 = multiple instruments on multiple tracks
2 = multiple songs on multiple tracks
W = Cakewalk WRK file (in future)
- = I can't figure it out
#T: Number of tracks in file
Time: Estimate of length in minutes and seconds
Midi Name: Name of composition
The Midi Name is filled in less often than you might think... there's no
standard "composition name" metaevent except for Sequence Name of Track 0,
but many people don't use this, and just stick the composition name in as
an instrument. Since others just stick general commentary in as
instruments, I couldn't come up with a reasonable rule for extracting the
name from the instruments. Sorry...
If there are any errors interpreting the file, you'll see a "** error" type
comment where the Midi Name is. In this case, ALNITLNG.MID is "** unknown
type". A quick look at ALNITLNG.MID reveals that it's a compressed file
masquerading as a Midi file. Shame! Another one you might see is
"** unknown MIDI status 123456:78". The first number is the hexidecimal
position in the file where the unknown status was found, the second number
is the status in hex. I've run several hundred MIDI files through, but
you might have some that use statuses not in the MIDI 1.0 standard.
MidiCat will try to find the next known status and keep going.
III. INFORMATIONAL MODES
MidiCat keeps track of some other informational items as it cruises through
the MIDI program. You can choose which of this information you want to
display, with information overload being your only real concern. Just add
some parameters to the command line:
midicat -1234567?+* -t -di -h -v <filename> (<filename> ... )
The options can be stacked together in one parameter if you want, like
"-+tdiv", they're just grouped by function here for convenience.
-1234567?: Print text fields found
1 = Text Event (Text) 2 = Copyright (Copy)
3 = Seq/Track Name (Name) 4 = Instrument Name (Inst)
5 = Lyric (Lyri) 6 = Marker (Mark)
7 = Cue Point (Cue ) ? = Other unknown text (????)
-+: Equivalent to -12346
-*: Equivalent to -1234567?
The MIDI standard defines several Meta Events, and reserves 1-15 for
different text events. 8 and up are undefined, but may be defined in the
future, or used by your MIDI program, so you can use ? to see all the
unrecognized text types.
Since I've found that people use fields 1, 2, 3, 4, and 6 for instruments
and/or comments without rhyme or reason, they're probably the most
interesting from an overview perspective so the "+" option is the same as
"12346". MidiCat will print any text events one per line.
-t: Print time from start of track for text events
MidiCat tries to keep track of the time as it goes through the midi file -
when it prints one of the text fields above, it'll add the time to it if
you use this option.
-h: Don't print MIDI info header
This turns off the "Filename..." and "-----" printing, in case you don't
need another set of headers.
-v: Only print info for valid MIDI files
If you use this, MidiCat won't print anything for files that it can't
recognize as MIDI files.
-d: Keep track of drums. Only valid for General MIDI.
-i: Keep track of instruments. Only valid for General MIDI.
See INSTUMENT ANALYSIS below.
If I do a "midicat -*t action4.mid" I get the following:
Filename Size F #T Time Midi Name
----------------------------------------------------------------------------
ACTION4 MID 36,635 1 15 1:26
0:00 0 Copy: Copyright (C) 1992 by Voyetra Technologies
0:00 1 Name: Copyright (C) 1992
0:00 2 Name: Voyetra Technologies
0:00 3 Name: B Melody
0:00 4 Name: B Bass
0:00 5 Name: B Melody 2
0:00 6 Name: B Drums
0:00 7 Name: X Rhythm Synth
0:00 8 Name: X Bass 1
0:00 9 Name: X Bass 2
0:00 10 Name: X Melody 1
0:00 11 Name: X Melody 2
0:00 12 Name: X Hi-Hat
0:00 13 Name: X Bass Drum
0:00 14 Name: X Snare Drum
The numbers on the left are the times, the next numbers are the track
numbers. You can see there are 15 tracks, numbered 0 through 14, though
only 3-14 appear to have instrument tracks. Next is a 4-character event
code:
Text: Text Event Copy: Copyright
Name: Seq/Track Name Inst: Instrument Name
Lyri: Lyric Mark: Marker
Cue : Cue Point ????: Other marker
Following that is the actual text contained in the file. They used the
Copyright event, but also included it as 2 sequence names. They didn't
bother to give it a name. All the sequence names come right at the starts
of the tracks. This is a fairly typical display, although it's more tracks
than normal.
IV. INSTRUMENT ANALYSIS
MidiCat has two instrument analysis modes. -i watches all the MIDI Program
Change messages as they go by and reports them. Usually this will be done
only once or maybe twice a track. -d watches all the MIDI Note On messages
for a Note being sent to channel 10, the percussion channel.
MidiCat assumes that the MIDI file is a General MIDI file. General MIDI
defines a specific set of instruments and drums, so that if you do a
program change to 110, you can guarantee that you're getting a bagpipe
sound. It also specifies that channel 10 is percussion, and which
instrument goes with each note. 52 (Eb3), for instance, is a Ride Cymbal.
If the MIDI file wasn't written for General MIDI, you can't guarantee that
the instrument getting played is the instrument the composer intended, so
things sound weird. For example, the Roland MT-32 has a different set
of patches, so a file composed for that won't sound right on a General MIDI
instrument. There's nothing in a MIDI file that tells you whether it's
General MIDI or not.
MidiCat can help here. It can show you all the program changes. If the
instrument names the composer used match with the instruments you're
seeing, it's probably a General MIDI file. If not, you'll have to reassign
the instruments for your General MIDI device. Here's an example:
D:\MIDI> midicat -*ti dasboot.mid
Filename Size F #T Time Midi Name
----------------------------------------------------------------------------
DASBOOT MID 50,191 1 9 11:11
0:00 1 Text: Strings
0:01 1 Midi Channel 1 set String Ensemble 1
0:00 2 Text: OrchesHit
0:01 2 Midi Channel 2 set Orchestra Hit
0:00 3 Text: Brass
0:01 3 Midi Channel 3 set SynthBrass 1
0:00 4 Text: Bimmel
0:01 4 Midi Channel 4 set Glockenspiel
0:00 5 Text: Echolot
0:01 5 Midi Channel 5 set FX 3 (crystal)
0:00 6 Text: Bass2
0:01 6 Midi Channel 6 set Synth Bass 2
0:00 7 Text: Bass
0:01 7 Midi Channel 7 set Synth Bass 1
0:00 8 Text: Drums
0:01 8 Midi Channel 10 set Standard Drum Set
This looks pretty good... the "Midi" lines tell you the which MIDI channel
was changed to what instrument. Comparing them with the "Text" events the
composer entered, you can see we're pretty well matched. This MIDI file
should play well on a General MIDI device.
Here's another one (I'm deleting some unnecessary lines for brevity):
D:\MIDI> midicat -*ti danube.mid
Filename Size F #T Time Midi Name
----------------------------------------------------------------------------
DANUBE MID 19,041 1 34 2:17
0:00 2 Name: for Voyetra's
0:00 3 Name: Sequencer Plus ver.4
0:00 5 Name: 1st Violin
0:00 5 Midi Channel 1 set Music Box
0:00 6 Name: Bass
0:00 6 Midi Channel 2 set Lead 2 (sawtooth)
0:00 7 Name: French Horn
0:00 7 Midi Channel 3 set Percussive Organ
0:00 8 Name: 1st Piano
0:00 8 Midi Channel 4 set FX 8 (sci-fi)
0:00 9 Name: 2nd Violin
0:00 9 Midi Channel 5 set Baritone Sax
0:00 10 Name: Cello
0:00 10 Midi Channel 6 set Vibraphone
0:00 11 Name: 2nd Cello
0:00 11 Midi Channel 7 set Vibraphone
0:00 12 Name: Flute
0:00 12 Midi Channel 8 set Reed Organ
0:00 13 Name: Trumpet
0:00 13 Midi Channel 9 set Dulcimer
0:00 14 Name: 3rd Violin
0:00 14 Midi Channel 10 set Unknown Drum Set
Obviously, this isn't going to play very well... A Percussive Organ is
nothing like a French Horn. This one will need hand conversion, unless you
have a "Voyetra to General MIDI" converter of some sort.
Sometimes the composer doesn't put ANY useful text information in the MIDI
file. In this case, MidiCat can give tell you what instruments are on what
tracks.
V. DRUM ANALYSIS
MidiCat also watches for General MIDI drum events. Since each note is a
different instrument, it wouldn't be reasonable to list every one as it's
found in the file. Instead, it keeps track of each event as it happens,
then lists them all after everything else.
It _does_ keep track of drum channel program changes. There is really no
standard for this, so I'm using the drum set table from my Roland SC-7.
Program Change # UsedCode Drum Set
----------------------------------------------------
0x00 - 0x0F S Standard Drum Set
0x10 - 0x17 P Power Drum Set
0x18, 0x1A-0x27 E Electric Drum Set
0x19 T TR-808 Drum Set
0x28-0x2F B Brush Percussion Set
0x30-0x37 O Orchestra Percussion Set
other S Unknown
You'll see these as they occur in the tracks, like this:
0:00 8 Text: Drums
0:01 8 Midi Channel 10 set Standard Drum Set
Don't panic if you see Unknown Drum Set, your MIDI device/program will
probably just use the Standard set anyway.
Once all the other information is listed, the used drums will be shown:
D:\MIDI> midicat -*d eleanor2.mid
Filename Size F #T Time Midi Name
----------------------------------------------------------------------------
ELEANOR2 MID 65,725 1 10 6:15
1 Name: bass | eleanor rigby
2 Name: bass | eleanor rigby
3 Name: brite celeste | lead
4 Name: brite celeste | lead
5 Name: chords
6 Name: chords
7 Name: drums | retrograde
8 Name: drums
9 Name: POP1 rhythm
Drums Used (General Midi):
S35:Ac. Bass [Kick 2] S36:Bass Drum 1 [Kick 1] S38:Ac. Snare [Snare 1]
S39:Hand Clap S42:Closed Hi-Hat S43:Hi Floor Tom [Lo 1]
S46:Open Hi-Hat S47:Lo-Mid Tom [Mid 1] S48:Hi-Mid Tom [Hi 2]
S49:Crash Cymbal 1 S51:Ride Cymbal 1 S69:Cabasa
Here we can see that all the drums used are from the standard set, because
of the "S" prefix. The [bracket] names are the Roland versions of the
names. Since there are so many of them out there, I decided to show both.
Drum "note" 47, for instance, is called Lo-Mid Tom by some General MIDI
docs, but Mid Tom 1 by the Roland SC-7 General MIDI device. Oh well.
This feature isn't as generally useful as the Instrument Analysis, but can
be interesting.